package org.hjl.commonutils.result;

import org.apache.logging.log4j.util.Strings;

/**
 * 返回结果封装
 *
 * @author hjl
 * @since 2024-08-05
 */

public class ResultUtil {

    /**
     * ResultUtils
     */
    ResultUtil() {
    }

    /**
     * success
     *
     * @param <E> 对象
     * @return Result
     */
    public static <E> R<E> success(String msg) {
        return new R<>(R.SUCCESS_CODE, msg);
    }

    /**
     * success
     *
     * @param <E> 对象
     * @return Result
     */
    public static <E> R<E> success() {
        return new R<>(R.SUCCESS_CODE, R.SUCCESS_MESSAGE);
    }

    /**
     * success
     *
     * @param o   对象
     * @param <E> 对象
     * @return Result
     */
    public static <E> R<E> success(E o) {
        return new R<>(R.SUCCESS_CODE, R.SUCCESS_MESSAGE, o);
    }

    /**
     * error
     *
     * @param <E> 对象
     * @return Result
     */
    public static <E> R<E> error() {
        return new R<>(R.ERROR_CODE, R.ERROR_MESSAGE);
    }

    /**
     * error
     *
     * @param msg 消息
     * @param <E> 对象
     * @return Result
     */
    public static <E> R<E> error(int code, String msg) {
        return new R<>(code, Strings.isEmpty(msg) ? R.ERROR_MESSAGE : msg);
    }

    /**
     * error
     *
     * @param msg 消息
     * @param <E> 对象
     * @return Result
     */
    public static <E> R<E> error(String msg) {
        return new R<>(R.ERROR_CODE, Strings.isEmpty(msg) ? R.ERROR_MESSAGE : msg);
    }

    /**
     * illegal
     *
     * @param <E> 对象
     * @return Result
     */
    public static <E> R<E> illegal() {
        return new R<>(R.ILLEGAL_CODE, R.ILLEGAL_MESSAGE);
    }

    /**
     * illegal
     *
     * @param msg 消息
     * @param <E> 对象
     * @return Result
     */
    public static <E> R<E> illegal(String msg) {
        return new R<>(R.ILLEGAL_CODE, Strings.isEmpty(msg) ? R.ILLEGAL_MESSAGE : msg);
    }

    /**
     * login
     *
     * @param <E> 对象
     * @return Result
     */
    public static <E> R<E> login() {
        return new R<>(R.LOGIN_ERROR_CODE, R.LOGIN_ERROR_MSG);
    }

    /**
     * login
     *
     * @param msg 消息
     * @param <E> 对象
     * @return Result
     */
    public static <E> R<E> login(String msg) {
        return new R<>(R.LOGIN_ERROR_CODE, Strings.isEmpty(msg) ? R.LOGIN_ERROR_MSG : msg);
    }

    public static Boolean isSuccess(R result) {
        if (null == result || result.getCode() != R.SUCCESS_CODE) {
            return false;
        }
        return true;
    }

}
